package org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.habilidad;

import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.Futbolista;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.FutbolistaBase;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.Rol;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.Balon;

/**
 * @author Joan Crosas
 *
 */
public class AvanzarConBalonRestrictivo extends HabilidadConBalon {

	public AvanzarConBalonRestrictivo( Futbolista futbolista ) {
		super(futbolista);
	}

	@Override
	public boolean ejecutar() {

		if( ( futbolista.getRol() == Rol.CENTRO || 
				futbolista.getRol() == Rol.DELANTERO || 
				futbolista.getRol() == Rol.LATERAL ) &&
				futbolista.getIteracionesParaRematar() == 0 && 
				!futbolista.getVisionPartido().saco() &&
				futbolista.balonEncima( futbolista.getVisionPartido().getBalon() ) ) {
			
			double potenciaMax = futbolista.potenciaMaxAutopase();
			Balon balon = null;
			
			double anguloBase = Math.PI / 2;
			if( futbolista.getDistanciaPorteriaRival() < FutbolistaBase.DISTANCIA_PORTERIA_AUTOPASE ) {
				anguloBase = futbolista.getAnguloPorteriaRival();
			}
			
			double angulo = anguloBase;
			double potencia;
			for( int j = 0; j < 4; j++ ) { // 4 steps
				for( int k = -1; k < 2; k+=2 ) { // +/-
					for( int i = 0; i < FutbolistaBase.DIVISIONES_POTENCIA_AUTOPASE; i++ ) {
						potencia = potenciaMax - i * potenciaMax / FutbolistaBase.DIVISIONES_POTENCIA_AUTOPASE;
						angulo = anguloBase + ( k * j * FutbolistaBase.DESVIO_ANGULO_AUTOPASE );
						balon = evaluarPase( futbolista, angulo, potencia, 0 );
						if( balon != null ) {
							futbolista.prepararJugadaMortal();
							return true;
						}
					}
					if( angulo == anguloBase ) {
						j++;
						k-=2;
					}
				}
			}
			
			
		}
		return false;
	}
	
	


}
